perm filename WIXSUB.FAI[VIS,HPM] blob sn#160941 filedate 1975-05-27 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00008 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002		TITLE	WIXSUB
C00005 00003	SHFT1:	0
C00010 00004	CLN:	0
C00014 00005	HIPASS:	0			HI PASS FILTERING
C00017 00006	***** SAIL INTERFACE ********
C00018 00007	ACS:	BLOCK	20
C00024 00008	CLEAN:	MOVEM	12,ACS12
C00025 ENDMK
C⊗;
	TITLE	WIXSUB
	ENTRY	INTRST,CLEAN,PASSHI
	EXTERN	SQRS
	EXTERN	MAKTAB,CORGET,CORREL
WIND:	0
HORWIN:	0
VERWIN:	0
NWIN:	0
WINSIZ:	0

STRIP:	0
MAPTAB:	0
STRIP2:	0

	A←ARRY2←ARRYO←BESTY←3 ↔ ARRY1←ARRY←CNT2←BESTX←4 ↔ DX1←VW←0
	B←T←16 ↔ C←TX←STRP←2 ↔ D←PT←PNT←5 ↔ TY←CNT←6
	SUMSQ←E←TXX←HC←7 ↔ PND←DX2←VC←10 ↔ PNC←X1←D1C←11
	PNE←Y1←D2C←12 ↔ PN1←X2←CNT1←13
	CC←Y2←TOP←14 ↔ DY1←POS←15 ↔ SUM←1 ↔ DL←17

PCLN←←0
PCWD←←1
PCBY←←2
PCBYA←←3
LNWD←←4
LNBY←←5
LNBYA←←6
WDBY←←7
WDBI←←10
BYBI←←11
BPTAB←←12
LINTAB←←13

PICWID:	0 ↔ BICWID: 0
PICLIN:	0 ↔ BICLIN: 0
PICHIG:	0 ↔ BICHIG: 0
PICBIT:	0 ↔ BICBIT: 0
PICWIZ:	0 ↔ BICWIZ: 0
PICSIZ:	0 ↔ BICSIZ: 0
COLTAB:	0 ↔ BOLTAB: 0
ROWTAB:	0 ↔ BOWTAB: 0

SETUP:	0
	MOVE	T,PCWD(ARRY)		;SET "GLOBALS" FOR COMPATABILITY WITH
	MOVEM	T,PICSIZ		;OLD FORMAT
	MOVE	T,LNBYA(ARRY)
	MOVEM	T,PICWIZ
	MOVE	T,BYBI(ARRY)
	MOVEM	T,PICBIT
	MOVE	T,PCLN(ARRY)
	MOVEM	T,PICHIG
	MOVE	T,LNWD(ARRY)
	MOVEM	T,PICLIN
	MOVE	T,LNBY(ARRY)
	MOVEM	T,PICWID
	MOVE	T,BPTAB(ARRY)
	MOVEM	T,COLTAB
	MOVEI	T,LINTAB(ARRY)
	MOVEM	T,ROWTAB
	MOVE	ARRY,(T)
	JRST	@SETUP

SETUP2:	0
	MOVE	T,PCWD(ARRY2)		;SET SIMILAR VARIABLES FOR SECOND ARRAY
	MOVEM	T,BICSIZ
	MOVE	T,LNBYA(ARRY2)
	MOVEM	T,BICWIZ
	MOVE	T,BYBI(ARRY2)
	MOVEM	T,BICBIT
	MOVE	T,PCLN(ARRY2)
	MOVEM	T,BICHIG
	MOVE	T,LNWD(ARRY2)
	MOVEM	T,BICLIN
	MOVE	T,LNBY(ARRY2)
	MOVEM	T,BICWID
	MOVE	T,BPTAB(ARRY2)
	MOVEM	T,BOLTAB
	MOVEI	T,LINTAB(ARRY2)
	MOVEM	T,BOWTAB
	MOVE	ARRY2,(T)
	JRST	@SETUP2
SHFT1:	0
PERUSE:	0
	MOVN	T,HORWIN
	HRRM	T,CV
	HRRM	T,CV+2
	HRRM	T,CW
	HRRM	T,CW+1
	ADDI	T,1
	HRRM	T,DV
	HRRM	T,DV+2
	HRRM	T,DW
	HRRM	T,DW+1
	ADDI	T,1
	HRRM	T,EV
	HRRM	T,EV+2
	HRRM	T,EW
	HRRM	T,EW+1
	MOVN	STRP,PICWIZ
	IMUL	STRP,WIND
	SUB	STRP,PICWIZ
	HRLZ	STRP,STRP
	HRLZ	PNT,PICBIT
	LSH	PNT,6
	ADDI	PNT,-1(ARRY)
THIS←←2
SIZ←←3
	MOVEM	THIS,STRIP		;TEPORARILY SAVE STRP AND ARRYO,
	MOVEM	SIZ,STRIP2		;BECAUSE THESE ARE THE "THIS" AND
	MOVE	SIZ,WIND		;"SIZ" ACS FOR CORGET
	ADDI	SIZ,1
	IMUL	SIZ,PICWIZ
	PUSHJ	17,CORGET
	HALT
	HRRM	THIS,PQ1
	HRRM	THIS,ILP
	HRRM	THIS,PQ2
	HRRM	THIS,PQ3
	ADDI	THIS,1
	HRRM	THIS,PR1
	HRRM	THIS,PR2
	ADD	THIS,PICWIZ
	HRRM	THIS,PP1
	SUBI	THIS,1
	HRRM	THIS,PP
	HRRM	THIS,PP0
	MOVE	THIS,STRIP
	MOVE	SIZ,STRIP2

	MOVEI	T,5		;CALCULATE SHIFT NEEDED TO MAKE SAMPLE SIZE
	SUB	T,PICBIT	;FIVE BITS
	HRRZM	T,SHFT1

	SUBI	ARRYO,1
	MOVE	VW,VERWIN
	SETZ	SUM,
VERLP:	MOVE	CNT,STRP
UNPAK:	ILDB	T,PNT
	LSH	T,@SHFT1
PQ1:	MOVEM	T,STRIP(CNT)
	AOBJN	CNT,UNPAK
	MOVE	CNT,HORWIN
	SETZB	POS,TOP
KLP:	SETZB	HC,VC
	SETZB	D1C,D2C
	MOVE	CNT2,WIND
JLP:	MOVE	CNT1,WIND
ILP:	MOVE	T,STRIP(POS)
PR1:	SUB	T,STRIP+1(POS)
	ADD	HC,SQRS(T)
PQ2:	MOVE	T,STRIP(POS)
PP:	SUB	T,STRIP+1(POS)			;REPLACED BY STRIP+<PICWID>(POS)
	ADD	VC,SQRS(T)
PQ3:	MOVE	T,STRIP(POS)
PP1:	SUB	T,STRIP+1(POS)			;REPLACED BY STRIP +<PICWID>+1
	ADD	D1C,SQRS(T)
PR2:	MOVE	T,STRIP+1(POS)
PP0:	SUB	T,STRIP+1(POS)			;REPLACED BY STRIP+<PICWID>
	ADD	D2C,SQRS(T)
	ADD	POS,PICWIZ
	SOJG	CNT1,ILP
	AOS	POS,TOP
	SOJG	CNT2,JLP
	TLZ	HC,777774			;remove sum portions, keep squares
	TLZ	VC,777774			;remove sum portions, keep squares
	TLZ	D1C,777774			;remove sum portions, keep squares
	TLZ	D2C,777774			;remove sum portions, keep squares
	CAMLE	HC,VC
	MOVE	HC,VC
	CAMLE	HC,D1C
	MOVE	HC,D1C
	CAMLE	HC,D2C
	MOVE	HC,D2C
	ADD	SUM,HC
	TRZ	HC,1				;THE LOCAL MAXIMUM TEST
	MOVEI	T,1
	CAMGE	HC,(ARRYO)
	AOJA	HC,CW
	ORM	T,(ARRYO)
CV:	CAMGE	HC,HORWIN(ARRYO)		;R HALF BECOMES -<HORWIN>
	AOJA	HC,DW
	ORM	T,HORWIN(ARRYO)			;BECOMES -<HORWIN>(ARRYO)
DV:	CAMGE	HC,1+HORWIN(ARRYO)		;BECOMES 1-<HORWIN>
	AOJA	HC,EW
	ORM	T,1+HORWIN(ARRYO)		;1-<HORWIN>
EV:	CAMGE	HC,2+HORWIN(ARRYO)		;2-<HORWIN>
	AOJA	HC,LOOF
	ORM	T,2+HORWIN(ARRYO)		;2-<HORWIN>
	JRST	LOOF
CW:	CAMLE	HC,HORWIN(ARRYO)		;-<HORWIN>
	ORM	T,HORWIN(ARRYO)			;-<HORWIN>
DW:	CAMLE	HC,1+HORWIN(ARRYO)		;1-<HORWIN>
	ORM	T,1+HORWIN(ARRYO)		;1-<HORWIN>
EW:	CAMLE	HC,2+HORWIN(ARRYO)		;2-<HORWIN>
	ORM	T,2+HORWIN(ARRYO)		;2-<HORWIN>
LOOF:	PUSH	ARRYO,HC
	SOJG	CNT,KLP
	SUB	PNT,PICLIN
	SOJG	VW,VERLP

	HRRZ	THIS,PQ1
	PUSHJ	17,CORREL

	JRST	@PERUSE
CLN:	0
	MOVE	CNT,PICWIZ
	SUBI	CNT,2
	MOVE	A,PICHIG
	SUBI	A,2
	IMUL	CNT,A
	HRLZ	PND,PICBIT
	LSH	PND,6
	ADDI	PND,-1(ARRY)
	MOVE	PNC,PND
	ADD	PNC,PICLIN
	ILDB	B,PNC
	MOVE	PNE,PNC
	ADD	PNE,PICLIN
	ILDB	A,PNC
	MOVE	PN1,PNC
	ILDB	CC,PNC
	IBP	PND
	ILDB	D,PND
	ILDB	E,PNE
WOOP:	MOVE	C,CC
	CAMLE	B,C
	EXCH	B,C
	CAMLE	D,E
	EXCH	D,E
	CAMLE	B,D
	EXCH	B,D
	CAMLE	C,E
	EXCH	C,E
	CAMLE	C,D
	EXCH	C,D
	CAMLE	A,D
	DPB	D,PN1
	CAMGE	A,C
	DPB	C,PN1
	MOVE	PN1,PNC
	MOVE	B,A
	MOVE	A,CC
	ILDB	CC,PNC
	ILDB	D,PND
	ILDB	E,PNE
	SOJG	CNT,WOOP
	JRST	@CLN
HIPASS:	0			;HI PASS FILTERING
	MOVE	T,BOLTAB	;SET UP RIGHT INDEX TABLE REFERENCES
	SUBI	T,1
	HRRM	T,BOLF
	MOVE	T,BOWTAB
	SUBI	T,1
	HRRM	T,BOWF

	MOVE	T,MAPTAB
	HRRM	T,SMT1
	HRRM	T,SMT2
	MOVE	T,STRIP2
	HRRM	T,S2R1
	HRRM	T,S2R2
	HRRM	T,S2R3
	HRRM	T,S2R4
	HRRM	T,S2R5
	SUBI	T,1
	HRRM	T,CO

	MOVEI	E,1
	ASH	E,@PICBIT
	MOVE	C,E
	ASH	C,1
	SUBI	E,1
	MOVE	CNT,E
	HRRM	CNT,TABTS
	HRRM	CNT,TABTS+1
	ASH	CNT,-1
	HRRM	CNT,TABL
	MOVN	E,E
TABL:	HRREI	VW,100(E)
	CAIGE	VW,0
	MOVEI	VW,0
TABTS:	CAILE	VW,77
	MOVEI	VW,77
SMT1:	MOVEM	VW,MAPTAB(E)
	ADDI	E,1
	SOJG	C,TABL
BRK:	HRL	E,ARRY1
	HRR	E,ARRY2
	MOVE	C,ARRY2
	ADD	C,PICSIZ
	SUBI	C,1
	BLT	E,(C)
	MOVN	CNT,PICWIZ
	HRLZ	CNT,CNT
	HRLZ	PNT,PICBIT
	LSH	PNT,6
	ADDI	PNT,-1(ARRY)
	MOVE	PN1,PNT
	MOVE	B,CNT
CL:	ILDB	VW,PNT
S2R1:	MOVEM	VW,STRIP2(B)
	AOBJN	B,CL
	MOVE	E,WIND
	SOJLE	E,NADD
CN:	MOVE	B,CNT
CM:	ILDB	VW,PNT
S2R2:	ADDM	VW,STRIP2(B)
	AOBJN	B,CM
	SOJG	E,CN
NADD:	MOVE	DL,WIND
	ASH	DL,-1
BOLF:	MOVE	ARRY2,BOLTAB-1(DL)	;REPLACED BY REAL BOLTAB ADDRESS
BOWF:	ADD	ARRY2,BOWTAB-1(DL)	;DITTO FOR BOWTAB
	MOVE	C,WIND
	SUB	C,PICWIZ
	HRLZ	C,C
S2R3:	MOVEI	VW,STRIP2
	ADD	VW,WIND
	HRRM	VW,SUMST
	MOVE	E,PICHIG
	SUB	E,WIND
CR:	SETZ	SUM,
	MOVE	B,WIND
CO:	ADD	SUM,STRIP2-1(B)
	SOJG	B,CO
	MOVE	B,C
	MOVE	PND,PICLIN
	ADDB	PND,ARRY2
CP:	MOVE	CC,WINSIZ
	IDIVM	SUM,CC
	ILDB	DY1,PND
SHFST:	SUB	DY1,CC
SMT2:	MOVE	DY1,MAPTAB(DY1)
	DPB	DY1,PND
S2R4:	SUB	SUM,STRIP2(B)
SUMST:	ADD	SUM,STRIP2(B)		;CHANGED TO STRIP+<WIND>
	AOBJN	B,CP
	MOVE	B,CNT
CQ:	ILDB	CC,PN1
	ILDB	VW,PNT
	SUB	VW,CC
S2R5:	ADDM	VW,STRIP2(B)
	AOBJN	B,CQ
	SOJGE	E,CR
	JRST	@HIPASS
;***** SAIL INTERFACE ********

	P←17

ACS12:	0
ACS16:	0
ACS17:	0
RETAD:	0


INTRST:	MOVEM	12,ACS12
	MOVEM	16,ACS16
	POP	P,RETAD
	POP	P,ARRYO
	POP	P,WIND
	POP	P,ARRY
	JSR	SETUP
	MOVEM	17,ACS17
	MOVE	1,PICWID
	SUBI	1,1
	IDIV	1,WIND
	MOVEM	1,HORWIN
	MOVE	1,PICHIG
	SUBI	1,1
	IDIV	1,WIND
	MOVEM	1,VERWIN
	IMUL	1,HORWIN
	MOVEM	1,NWIN
	MOVE	1,WIND
	IMUL	1,1
	MOVEM	1,WINSIZ
	JSR	PERUSE
	MOVE	12,ACS12
	MOVE	16,ACS16
	MOVE	17,ACS17
	IDIV	SUM,NWIN
	JRST	@RETAD
ACS:	BLOCK	20
ARN1:	0
ARN2:	0
PASSHI:	MOVEM	12,ACS12
	MOVEM	16,ACS16
	POP	P,RETAD
	POP	P,ARRY2
	POP	P,WIND
	POP	P,ARRY1
	HRL	T,ARRY1
	HRR	T,ARRY2
	BLT	T,12(ARRY2)
	MOVE	T,ARRY2
	SUB	T,ARRY1
	ADDM	T,12(ARRY2)
	MOVEM	ARRY1,ARN1
	MOVEM	ARRY2,ARN2
	PUSH	P,ARRY2
	PUSHJ	P,MAKTAB
	MOVE	ARRY1,ARN1
	MOVE	ARRY2,ARN2
	JSR	SETUP
	JSR	SETUP2

	MOVE	1,PICWID	;SET UP WINDOW PARAMETERS
	SUBI	1,1
	IDIV	1,WIND
	MOVEM	1,HORWIN
	MOVE	1,PICHIG
	SUBI	1,1
	IDIV	1,WIND
	MOVEM	1,VERWIN
	IMUL	1,HORWIN
	MOVEM	1,NWIN
	MOVE	1,WIND
	IMUL	1,1
	MOVEM	1,WINSIZ

	MOVEM	16,ACS+16	;SET UP UNPACKING AND MAP TABLE AREAS
	MOVEI	16,ACS
	BLT	16,ACS+15
	MOVEI	SIZ,1
	ASH	SIZ,@PICBIT
	MOVEM	SIZ,MAPTAB
	ASH	SIZ,1
	PUSHJ	17,CORGET
	HALT
	MOVEM	THIS,STRIP
	ADDM	THIS,MAPTAB
	MOVE	SIZ,PICWIZ
	PUSHJ	17,CORGET
	HALT
	MOVEM	THIS,STRIP2
	HRLZI	16,ACS
	BLT	16,16

	MOVEM	17,ACS17
	JSR	HIPASS
	MOVE	17,ACS17
	MOVE	16,ACS16
	MOVE	12,ACS12

	MOVE	THIS,STRIP
	PUSHJ	17,CORREL
	MOVE	THIS,STRIP2
	PUSHJ	17,CORREL

	JRST	@RETAD
CLEAN:	MOVEM	12,ACS12
	MOVEM	16,ACS16
	POP	P,RETAD
	POP	P,ARRY
	JSR	SETUP
	MOVEM	17,ACS17
	JSR	CLN
	MOVE	12,ACS12
	MOVE	16,ACS16
	MOVE	17,ACS17
	JRST	@RETAD

	END